package Funcionalidades.GestionarFixture;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.util.Vector;

import Entidades.EntidadesDTO.CompetenciaDTO;
import Entidades.EntidadesDTO.DatosDTO;
import Entidades.EntidadesDTO.EncuentroDTO;
import Entidades.EntidadesDTO.ParticipanteDTO;
import Entidades.EntidadesDTO.ResultadoPorPuntosDTO;
import Entidades.EntidadesLogica.Competencia;
import Entidades.EntidadesLogica.Encuentro;
import Entidades.EntidadesLogica.Participante;
import Funcionalidades.Menues.FrameUsuarioAutenticado;
import Funcionalidades.Menues.iDialogGeneral;
import Funcionalidades.MostrarFixture.MostrarFixture;
import Gestores.GestorCompetencia;
import Gestores.GestorFixture;
import Gestores.GestorUsuario;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SwingConstants;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.EmptyBorder;

public class GestionarPuntuacion extends iDialogGeneral {

	private final JPanel panelDatos = new JPanel();

	private static final long serialVersionUID = 1L;
	

	private JSpinner spLocal;
	private JSpinner spVisitante;
	private int ronda;
	private Encuentro encuentro;
	private Competencia competencia;
	public int getRonda() {
		return ronda;
	}



	public void setRonda(int ronda) {
		this.ronda = ronda;
	}


	private GestorCompetencia gCompetencia;
	private GestorFixture gFixture;
	private GestorUsuario gUsuario;

	public GestionarPuntuacion(FrameUsuarioAutenticado pantallaPrincipal) {
		super(pantallaPrincipal,true);

		label= new Dimension(120, 30);
		datos= new Dimension(100,30);
		gFixture=gFixture.getGestorFixture();
		gUsuario=gUsuario.getGestorUsuario();
		gCompetencia=gCompetencia.getGestorCompetencia();
		Dimension tam= new Dimension(400, 350);
		setTamanio(tam);
		BorderLayout borderLayout = new BorderLayout();
		borderLayout.setVgap(5);
		borderLayout.setHgap(5);
		getContentPane().setLayout(borderLayout);
		
		JPanel panelTitulo = new JPanel();
		FlowLayout flowLayout = (FlowLayout) panelTitulo.getLayout();
		flowLayout.setHgap(0);
		flowLayout.setVgap(4);
		panelTitulo.setMaximumSize(panel);
		getContentPane().add(panelTitulo, BorderLayout.NORTH);
		
		JLabel lblTitulo = new JLabel("Gestionar Resultado");
		lblTitulo.setFont(new Font("Vani", Font.PLAIN, 20));
		panelTitulo.add(lblTitulo);
		
		panelDatos.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(panelDatos, BorderLayout.CENTER);
		panelDatos.setLayout(new BoxLayout(panelDatos, BoxLayout.Y_AXIS));
		
		JPanel panelInstansia = new JPanel();
		panelDatos.add(panelInstansia);
		panelInstansia.setMaximumSize(panel);
		
		JLabel lblInstanciaDeLa = new JLabel("Instancia de la Competencia: ");
		lblInstanciaDeLa.setHorizontalAlignment(SwingConstants.CENTER);
		panelInstansia.add(lblInstanciaDeLa);
		lblInstanciaDeLa.setPreferredSize(new Dimension(300,30));
		
		
		JPanel panelEquipos = new JPanel();
		panelDatos.add(panelEquipos);
		panelEquipos.setMaximumSize(panel);
		
		JLabel lblparticipantelocl = new JLabel("#ParticipanteLocal");
		lblparticipantelocl.setHorizontalTextPosition(SwingConstants.RIGHT);
		lblparticipantelocl.setHorizontalAlignment(SwingConstants.RIGHT);
		panelEquipos.add(lblparticipantelocl);
		lblparticipantelocl.setPreferredSize(label);
		
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		panelEquipos.add(horizontalStrut);
		
		
		JLabel lblparticipantevisitante = new JLabel("#ParticipanteVisitante");
		lblparticipantevisitante.setHorizontalTextPosition(SwingConstants.LEFT);
		lblparticipantevisitante.setHorizontalAlignment(SwingConstants.LEFT);
		panelEquipos.add(lblparticipantevisitante);
		lblparticipantevisitante.setPreferredSize(label);
		
		
		JPanel panelTantos = new JPanel();
		panelDatos.add(panelTantos);
		panelTantos.setMaximumSize(panel);
		
		spLocal = new JSpinner();
		spLocal.setModel(new SpinnerNumberModel(new Integer(0), new Integer(0), null, new Integer(1)));
		panelTantos.add(spLocal);
		spLocal.setPreferredSize(datos);
		
		
		Component horizontalStrut2 = Box.createHorizontalStrut(20);
		panelTantos.add(horizontalStrut2);
		
		
		spVisitante = new JSpinner();
		spVisitante.setModel(new SpinnerNumberModel(new Integer(0), new Integer(0), null, new Integer(1)));
		panelTantos.add(spVisitante);
		spVisitante.setPreferredSize(datos);
		
		
		JPanel panelInasistencia = new JPanel();
		panelDatos.add(panelInasistencia);
		panelInasistencia.setMaximumSize(panel);
		
		JButton btnNotificarInasistencia = new JButton("Notificar Inasistencia");
		panelInasistencia.add(btnNotificarInasistencia);
		btnNotificarInasistencia.setPreferredSize(new Dimension(200,30));
		btnNotificarInasistencia.addActionListener(new notificarInasistenciaAction(getFramePerteneciente()));
		
		
		Component glue = Box.createGlue();
		panelDatos.add(glue);
				
		JPanel buttonPane = new JPanel();
		buttonPane.setMaximumSize(panel);
		buttonPane.setLayout(new FlowLayout(FlowLayout.CENTER));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		
		JButton okButton = new JButton("Aceptar");
		okButton.setActionCommand("OK");
		buttonPane.add(okButton);
		okButton.setPreferredSize(datos);
		okButton.addActionListener(new aceptarAction());

		
		Component horizontalStrut3 = Box.createHorizontalStrut(20);
		buttonPane.add(horizontalStrut3);
		
		
		JButton cancelButton = new JButton("Cancelar");
		cancelButton.setActionCommand("Cancel");
		buttonPane.add(cancelButton);
		cancelButton.setPreferredSize(datos);
		
		

	}
	
	class aceptarAction extends AbstractAction{

		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent arg0) {
			int rLocal=(int) spLocal.getValue();
			int rVisitante=(int) spVisitante.getValue();
			Participante p1=encuentro.getParticipanteLocal();
			Participante p2=encuentro.getParticipanteVisitante();
			
			
			CompetenciaDTO competenciaDTO=new CompetenciaDTO(competencia.getNombreCompetencia(),competencia.getDeporteAsociado(), competencia.getEstado(), null,gUsuario.getUsuarioLogueado());
		
			
			DatosDTO d1= new DatosDTO(p1.getDatosActuales().getNombre(), p1.getDatosActuales().getCorreoElectronico(), null, null);
			DatosDTO d2= new DatosDTO(p2.getDatosActuales().getNombre(), p2.getDatosActuales().getCorreoElectronico(), null, null);
			
			
			ParticipanteDTO pd1= new ParticipanteDTO(p1.getIdParticipante(),d1, null, null);
			ParticipanteDTO pd2= new ParticipanteDTO(p2.getIdParticipante(),d2,null,null);
			
			//resultadoPuntosDTO recibe -1 si se carga o el id del resultado que ya se encuentra...
			ResultadoPorPuntosDTO resultadoPuntosDTO= new ResultadoPorPuntosDTO(32, null, rLocal, rVisitante);
			EncuentroDTO enc= new EncuentroDTO(encuentro.getNum_encuentro(), null, null, pd1,pd2, null, null, null, resultadoPuntosDTO, null, null);
			
			try{

				gFixture.modificarResultado(competenciaDTO, enc, ronda+1);
				gCompetencia.getGestorCompetencia();
				gCompetencia.setCompetencia(gCompetencia.getCompetencia(competencia.getNombreCompetencia(), competencia.getCreadaPor().getCorreo_electronico()));
				
				JOptionPane.showMessageDialog(getFramePerteneciente(),"Se ha ingresado el resultado correctamente.","Felicitaciones!",   JOptionPane.INFORMATION_MESSAGE);
				
				
			}
			catch(Throwable t){
				t.printStackTrace();
				System.out.println(t.getMessage());
			}

			cerrarDialog();
			
		}
		
		
		
	}



	public Encuentro getEncuentro() {
		return encuentro;
	}



	public void setEncuentro(Encuentro encuentro) {
		this.encuentro = encuentro;
	}



	public Competencia getCompetencia() {
		return competencia;
	}



	public void setCompetencia(Competencia competencia) {
		this.competencia = competencia;
	}
	
	
	class notificarInasistenciaAction extends AbstractAction{
		
		private static final long serialVersionUID = 1L;

		private int inasistente;
		
		private GestorFixture gFixture;
		private GestorUsuario gUsuario;
		private FrameUsuarioAutenticado frame;
		
		public notificarInasistenciaAction(FrameUsuarioAutenticado frame){
			super();
			this.frame=frame;
		}
		
		public void actionPerformed(ActionEvent arg0) {
			gFixture= gFixture.getGestorFixture();
			gUsuario= gUsuario.getGestorUsuario();
			
			
			Participante p1=encuentro.getParticipanteLocal();
			Participante p2=encuentro.getParticipanteVisitante();

			DatosDTO d1= new DatosDTO(p1.getDatosActuales().getNombre(), p1.getDatosActuales().getCorreoElectronico(), null, null);
			DatosDTO d2= new DatosDTO(p2.getDatosActuales().getNombre(), p2.getDatosActuales().getCorreoElectronico(), null, null);
			
			ParticipanteDTO pd1= new ParticipanteDTO(p1.getIdParticipante(),d1, null, null);
			ParticipanteDTO pd2= new ParticipanteDTO(p2.getIdParticipante(),d2,null,null);
			CompetenciaDTO competenciaDTO=new CompetenciaDTO(competencia.getNombreCompetencia(), competencia.getDeporteAsociado(), competencia.getEstado(), null,gUsuario.getUsuarioLogueado());
			
			
			notificarInasistencia iNotificar= new notificarInasistencia(getFramePerteneciente());
			iNotificar.actualizarCB(new Vector<String>(), encuentro);
			iNotificar.setRonda(ronda);
			iNotificar.setEncuentro(encuentro);
			iNotificar.activarDG();
			
			
			EncuentroDTO enc = null;
			
			if(inasistente==1){
				enc= new EncuentroDTO(encuentro.getNum_encuentro(), null, null, pd1, pd2, null, pd1, null, null, null, null);
			}
			else if(inasistente==2)
				enc= new EncuentroDTO(encuentro.getNum_encuentro(), null, null, pd1, pd2, null,null , pd2, null, null, null);

			
			try{
				if(inasistente!=1 &&inasistente!=2){
					System.out.println("Inasistente mal");
				}
				else
					gFixture.modificarResultado(competenciaDTO, enc, ronda+1);
			}
			catch(Throwable t){
				System.out.println(t.getMessage());
			}
			getParent().setFocusable(true);
			dispose();

		}
		
	}


}